注意
以下代码仅为演示代码,用于测试显示屏能实现最基本的通信功能,如果您需要在正式产品中进行使用,请根据自己的需求对代码进行相应的优化和修改,或以自己的方式实现相应的功能
注意
以下代码适用于ESP32S3
arduino只支持utf8编码,因此需要发送汉字时,在新建串口屏工程时请选择UTF8编码,导入字库时也要使用UTF8字库,参考 arduino发送中文时乱码
1 //arduino IDE 上的型号选择ESP32S3 Dev Module 2 //arduino的GND接串口屏或串口工具的GND,共地 3 //arduino的9接串口屏或串口工具的RX 4 //arduino的8接串口屏或串口工具的TX 5 //arduino的5V接串口屏的5V,如果是串口工具,不用接5V也可以 6 //根据自己的实际修改对应的TX_Pin和RX_Pin 7 #define TJC Serial1 8 #define TX_Pin 17 9 #define RX_Pin 18 10 #define FRAME_LENGTH 7 11 12 int a; 13 unsigned long nowtime; 14 void setup() { 15// put your setup code here, to run once: 16//初始化串口 17TJC.begin(115200, SERIAL_8N1, RX_Pin, TX_Pin); 18 19//因为串口屏开机会发送88 ff ff ff,所以要清空串口缓冲区 20while (TJC.read() >= 0); //清空串口缓冲区 21TJC.print("page main\xff\xff\xff"); //发送命令让屏幕跳转到main页面 22nowtime = millis(); //获取当前已经运行的时间 23 } 24 25 void loop() { 26// put your main code here, to run repeatedly: 27char str[100]; 28if (millis() >= nowtime + 1000) { 29 nowtime = millis(); //获取当前已经运行的时间 30 31 //用sprintf来格式化字符串,给n0的val属性赋值 32 sprintf(str, "n0.val=%d\xff\xff\xff", a); 33 //把字符串发送出去 34 TJC.print(str); 35 36 //用sprintf来格式化字符串,给t0的txt属性赋值 37 sprintf(str, "t0.txt=\"现在是%d\"\xff\xff\xff", a); 38 //把字符串发送出去 39 TJC.print(str); 40 41 42 //用sprintf来格式化字符串,触发b0的按下事件,直接把结束符整合在字符串中 43 sprintf(str, "click b0,1\xff\xff\xff"); 44 //把字符串发送出去 45 TJC.print(str); 46 47 delay(50); //延时50ms,才能看清楚点击效果 48 49 //用sprintf来格式化字符串,触发b0的弹起事件,直接把结束符整合在字符串中 50 sprintf(str, "click b0,0\xff\xff\xff"); 51 //把字符串发送出去 52 TJC.print(str); 53 54 a++; 55} 56 57//串口数据格式: 58//串口数据帧长度:7字节 59//帧头 参数1参数2参数3帧尾 60//0x55 1字节1字节1字节 0xffffff 61//当参数是01时 62//帧头 参数1参数2参数3帧尾 63//0x55 01 led编号 led状态0xffffff 64//例子1:上位机代码 printh 55 01 01 00 ff ff ff 含义:1号led关闭 65//例子2:上位机代码 printh 55 01 04 01 ff ff ff 含义:4号led打开 66//例子3:上位机代码 printh 55 01 00 01 ff ff ff 含义:0号led打开 67//例子4:上位机代码 printh 55 01 04 00 ff ff ff 含义:4号led关闭 68 69//当参数是02或03时 70//帧头 参数1参数2参数3帧尾 71//0x55 02/03滑动值000xffffff 72//例子1:上位机代码 printh 55 02 64 00 ff ff ff 含义:h0.val=100 73//例子2:上位机代码 printh 55 02 00 00 ff ff ff 含义:h0.val=0 74//例子3:上位机代码 printh 55 03 64 00 ff ff ff 含义:h1.val=100 75//例子4:上位机代码 printh 55 03 00 00 ff ff ff 含义:h1.val=0 76 77 78//当串口缓冲区大于等于一帧的长度时 79while (TJC.available() >= FRAME_LENGTH) { 80 unsigned char ubuffer[FRAME_LENGTH]; 81 //从串口缓冲读取1个字节但不删除 82 unsigned char frame_header = TJC.peek(); 83 //当获取的数据是包头(0x55)时 84 if (frame_header == 0x55) { 85//从串口缓冲区读取7字节 86TJC.readBytes(ubuffer, FRAME_LENGTH); 87if (ubuffer[4] == 0xff && ubuffer[5] == 0xff && ubuffer[6] == 0xff) { 88 if(ubuffer[1] == 0x01) 89 { 90//下发的是LED信息 91sprintf(str, "msg.txt=\"led %d is %s\"\xff\xff\xff", ubuffer[2], ubuffer[3] ? "on" : "off"); 92TJC.print(str); 93 94 }else if(ubuffer[1] == 0x02) 95 { 96//下发的是滑动条h0.val的信息 97sprintf(str, "msg.txt=\"h0.val is %d\"\xff\xff\xff", ubuffer[2]); 98TJC.print(str); 99100 }else if(ubuffer[1] == 0x03)101 {102//下发的是滑动条h1.val的信息103sprintf(str, "msg.txt=\"h1.val is %d\"\xff\xff\xff", ubuffer[2]);104TJC.print(str);105106 }107108}109 } else {110TJC.read(); //从串口缓冲读取1个字节并删除111 }112}113 }其他参考